package ru.mirent.handlers;

import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler;

public class LifecycleMethodsExceptionHandler implements LifecycleMethodExecutionExceptionHandler {

    /**
     * Метод вызывается при возникновении ошибки при вызове метода: помеченного аннотацией @BeforeAll и в случае
     * ошибки коллбэк-метода этого же типа.
     */
    public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
        System.out.printf("%s:%s:%s - %s/%s%n",
                "LifecycleMethodsExceptionHandler",
                "LifecycleMethodExecutionExceptionHandler",
                "handleBeforeAllMethodExecutionException",
                throwable.getClass().getSimpleName(),
                throwable.getLocalizedMessage());
        throw throwable;
    }

    /**
     * Метод вызывается при возникновении ошибки при вызове метода: помеченного аннотацией @BeforeEach и в случае
     * ошибки коллбэк-метода этого же типа.
     */
    @Override
    public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
        System.out.printf("%s:%s:%s - %s/%s%n",
                "LifecycleMethodsExceptionHandler",
                "LifecycleMethodExecutionExceptionHandler",
                "handleBeforeEachMethodExecutionException",
                throwable.getClass().getSimpleName(),
                throwable.getLocalizedMessage());
        throw throwable;
    }

    /**
     * Метод вызывается при возникновении ошибки при вызове метода: помеченного аннотацией @AfterEach и в случае
     * ошибки коллбэк-метода этого же типа.
     */
    @Override
    public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
        System.out.printf("%s:%s:%s - %s/%s%n",
                "LifecycleMethodsExceptionHandler",
                "LifecycleMethodExecutionExceptionHandler",
                "handleAfterEachMethodExecutionException",
                throwable.getClass().getSimpleName(),
                throwable.getLocalizedMessage());
        throw throwable;
    }

    /**
     * Метод вызывается при возникновении ошибки при вызове метода: помеченного аннотацией @AfterAll и в случае
     * ошибки коллбэк-метода этого же типа.
     */
    @Override
    public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
        System.out.printf("%s:%s:%s - %s/%s%n",
                "LifecycleMethodsExceptionHandler",
                "LifecycleMethodExecutionExceptionHandler",
                "handleAfterAllMethodExecutionException",
                throwable.getClass().getSimpleName(),
                throwable.getLocalizedMessage());
        throw throwable;
    }
}
